package com.xcity.game.rank;

import java.util.Collection;
import java.util.List;

import com.xcity.db.entity.Player;
import com.xcity.db.entity.Ranking;

import naga.x.event.EventListener;
import naga.x.util.CollectionProcedure;

public interface RankingList extends EventListener {

	/** 初始化排行榜数据 */
	void init();
	/** 排行榜类型 */
	byte getType();
	/** 获取排行榜容量 */
	int getCapacity();
	/** 获取排行榜数量 */
	int size();
	/** 向排行榜加入一项数据 */
	void add(Ranking entry);
	/** 向排行榜加入一批数据 */
	void addAll(Collection<Ranking> entries);
	/** 移除某个玩家的排行数据 @see {@link #remove(long)} */
	void remove(Player player);
	/** 移除排行榜中的某一项 */
	void remove(long key);
	/** 清空排行榜（异步执行） */
	void clearAsync();
	/** 清空排行榜（同步执行） */
	void clear();
	/** 保存排行榜数据 */
	void save();
	/** 获取排行榜列表 */
	List<Ranking> getEntries();
	/** 获取某个玩家的排行榜列表（eg.QQ好友排行榜） */
	List<Ranking> getEntries(Player player);
	/** 根据排行索引获取某项数据 */
	Ranking getEntry(int index);
	/** 查询某个玩家的排行数据 @see {@link #findEntry(long)} */
	Ranking findEntry(Player player);
	/** 查询某个玩家的排行数据 */
	Ranking findEntry(long key);
	/** 交换玩家排名 */
	boolean swap(Player player1, Player player2);
	/** 标记某个玩家的排行数据发生变化 */
	Ranking setDirty(Player player, long newValue);
	/** 执行一次排序 */
	void doSort();
	/** 遍历列表 */
	void forEach(CollectionProcedure<Ranking> procedure);
	
}
